import os
import sys
import shutil
import argparse


def build_frontend():
    """构建前端项目"""
    try:
        # 进入WEB目录
        os.chdir("WEB")
        
        # 检查pnpm是否安装
        if shutil.which("pnpm") is None:
            raise Exception("pnpm未安装，请先安装pnpm")
        
        # 安装依赖
        if os.system("pnpm install --frozen-lockfile") != 0:
            raise Exception("pnpm install 失败")
        
        # 构建项目
        if os.system("pnpm build") != 0:
            raise Exception("pnpm build 失败")
        
        # 返回根目录
        os.chdir("..")
        print("前端项目构建成功")
    except Exception as e:
        print(f"前端构建失败: {e}")
        sys.exit(1)


def move_dist():
    """移动dist目录到internal/v2/web"""
    try:
        # 如果目标目录已存在，先删除
        dist_target = os.path.join("internal", "v2", "web", "dist")
        if os.path.exists(dist_target):
            shutil.rmtree(dist_target)
        
        # 移动dist目录
        shutil.move(os.path.join("WEB", "dist"), dist_target)
        print("dist目录移动成功")
    except Exception as e:
        print(f"移动dist目录失败: {e}")
        sys.exit(1)


def tidy():
    print("整理Go模块...")
    if os.system("go mod tidy") != 0:
        print("go mod tidy 失败")
        sys.exit(1)
    print("Go模块整理完成")


def generate_swagger():
    """生成Swagger文档"""
    print("生成Swagger文档...")
    # 确保在项目根目录运行
    if os.system("swag init -g cmd/main.go --dir .") != 0:
        print("生成Swagger文档时出现警告: 可能找不到Go文件")
    else:
        print("Swagger文档生成成功")


def compile_go_code():
    """编译Go代码"""
    print("开始编译Go代码...")
    
    # 删除旧的可执行文件（如果存在）
    if os.path.exists("main"):
        os.remove("main")
    
    # 编译Go代码
    if os.system("go build -o main cmd/main.go") != 0:
        print("编译失败")
        sys.exit(1)
    print("Go代码编译成功")


def start_web_mode(port):
    """启动Web模式"""
    print(f"正在启动Web模式，监听端口: {port}")
    
    # Windows系统需要不同的执行方式
    if os.name == 'nt':  # Windows
        if os.system(f"main -web -port {port}") != 0:
            print("启动Web模式失败")
            sys.exit(1)
    else:  # Linux/Mac
        if os.system(f"./main -web -port {port}") != 0:
            print("启动Web模式失败")
            sys.exit(1)
    print("Web模式启动成功")


def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description="启动SSH连接检测服务")
    parser.add_argument("--port", type=str, default="8080", help="指定Web服务端口，默认为8080")
    parser.add_argument("--no-build", action="store_true", help="跳过前端构建步骤")
    args = parser.parse_args()

    # 检查是否在根目录运行
    if not os.path.exists(os.path.join("cmd", "main.go")):
        print("请在项目根目录运行此脚本")
        sys.exit(1)

    # 构建前端
    if not args.no_build:
        build_frontend()
    else:
        print("跳过前端构建步骤")
    
    # 移动dist目录
    if not args.no_build:
        move_dist()

    # 整理Go模块
    tidy()

    # 生成Swagger文档
    generate_swagger()

    # 编译Go代码
    compile_go_code()

    # 启动Web模式
    start_web_mode(args.port)

if __name__ == "__main__":
    main()